package com.chen.common.satoken.provider;

import cn.hutool.core.lang.Assert;
import com.chen.base.inter.LinkNodeHandler;
import com.chen.common.satoken.params.LoginParam;

import java.util.Map;

/**
 * @author: Long
 * @date: 2023/7/5 21:06
 **/
public abstract class AuthAbsProvider<P extends LoginParam, R extends String> implements LinkNodeHandler<P, R> {

    protected Map<String, Object> authParamMap;

    @Override
    public R handler(P params) {
        if (authType().equals(params.getAuthType())){
            Assert.notNull(params.getAuthParamMap(),"authParamMap 参数不能为空! ");
            authParamMap = params.getAuthParamMap();
            return loginId(params);
        }
        return null;
    }

    /**
     * 授权类型
     * @return 授权类型
     */
    public abstract String authType();

    /**
     * 返回登录所需的id
     * @param loginParam 登录参数
     * @return id
     */
    public abstract R loginId(LoginParam loginParam);
}
